home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / fish / 726-750 / 745 / arexxbox / rxif / rx_help.c < prev    next >
C/C++ Source or Header  |  1995-03-18  |  2KB  |  103 lines

  1.  
  2. void rx_help( struct RexxHost *host, struct rxd_help **rxd, long action )
  3. {
  4.     struct rxd_help *rd = *rxd;
  5.     struct rxs_command *rxc;
  6.     int cnt = 1;
  7.  
  8.     /*
  9.      * Dieser HELP-Befehl unterstützt (noch) nicht das PROMPT-Keyword
  10.      * da das nur im Rahmen eines GUIs Sinn hat
  11.      */
  12.  
  13.     switch( action )
  14.     {
  15.         case RXIF_INIT:
  16.             *rxd = calloc( sizeof *rd, 1 );
  17.             break;
  18.             
  19.         case RXIF_ACTION:
  20.             /* Insert your code HERE */
  21.             
  22.             if( rd->arg.prompt )
  23.             {
  24.                 rd->rc = -10;
  25.                 rd->rc2 = (long) "Prompt option not yet implemented";
  26.                 return;
  27.             }
  28.             
  29.             if( rd->arg.command )
  30.             {
  31.                 rxc = FindRXCommand( rd->arg.command );
  32.                 if( !rxc )
  33.                 {
  34.                     rd->rc = -10;
  35.                     rd->rc2 = (long) "Unknown Command";
  36.                     return;
  37.                 }
  38.                 
  39.                 if( rd->res.commanddesc = malloc( strlen(rxc->command)
  40.                     + strlen(rxc->args) + strlen(rxc->results) + 20 ) )
  41.                 {
  42.                     sprintf( rd->res.commanddesc,
  43.                         "%s%c%s%s%s%s%s",
  44.                         rxc->command, 
  45.                         (rxc->results || rxc->args) ? ' ' : '\0',
  46.                         rxc->results ? "VAR/K,STEM/K" : "",
  47.                         (rxc->results && rxc->args) ? "," : "",
  48.                         rxc->args ? rxc->args : "",
  49.                         rxc->results ? " => " : "",
  50.                         rxc->results ? rxc->results : "" );
  51.                 }
  52.                 else
  53.                 {
  54.                     rd->rc = 10;
  55.                     rd->rc2 = ERROR_NO_FREE_STORE;
  56.                     return;
  57.                 }
  58.             }
  59.             else
  60.             {
  61.                 char **s;
  62.                 
  63.                 rxc = rxs_commandlist;
  64.                 while( rxc->command )
  65.                 {
  66.                     cnt++;
  67.                     rxc++;
  68.                 }
  69.                 
  70.                 if( !(s = calloc( sizeof(char *), cnt )) )
  71.                 {
  72.                     rd->rc = 10;
  73.                     rd->rc2 = ERROR_NO_FREE_STORE;
  74.                     return;
  75.                 }
  76.                 rd->res.commandlist = s;
  77.                 
  78.                 rxc = rxs_commandlist;
  79.                 while( rxc->command )
  80.                 {
  81.                     *s = rxc->command;
  82.                     s++;
  83.                     rxc++;
  84.                 }
  85.             }
  86.             
  87.             break;
  88.         
  89.         case RXIF_FREE:
  90.             /* FREE your local data HERE */
  91.             
  92.             if( rd->res.commanddesc )
  93.                 free( rd->res.commanddesc );
  94.             if( rd->res.commandlist )
  95.                 free( rd->res.commandlist );
  96.             
  97.             free( rd );
  98.             break;
  99.     }
  100.     return;
  101. }
  102.  
  103.